{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MLP on the MNIST Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Trains four simple NNs with 10 hidden layers on the MNIST dataset. (5 runs, seed = 10, 20, 30, 40, 50)\n",
    "\n",
    "1. 784-800 (10 times)-10 (Fully Connected; MSE; lr = 0.01)\n",
    "\n",
    "~1 seconds per epoch on 4 GTX1080 Ti GPU, ~2 seconds per epoch on a GTX1070 GPU."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import Tensorflow package (for Keras) and Reproducibility"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "import random as rn\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import os\n",
    "os.environ['PYTHONHASHSEED'] = '0'\n",
    "\n",
    "seed = 10\n",
    "\n",
    "# The below is necessary for starting Numpy generated random numbers\n",
    "# in a well-defined initial state.\n",
    "\n",
    "np.random.seed(seed)\n",
    "\n",
    "# The below is necessary for starting core Python generated random numbers\n",
    "# in a well-defined state.\n",
    "\n",
    "rn.seed(seed)\n",
    "\n",
    "session_conf = tf.ConfigProto(intra_op_parallelism_threads=1, inter_op_parallelism_threads=4)\n",
    "\n",
    "# from keras import backend as K\n",
    "\n",
    "# The below tf.set_random_seed() will make random number generation\n",
    "# in the TensorFlow backend have a well-defined initial state.\n",
    "# For further details, see: https://www.tensorflow.org/api_docs/python/tf/set_random_seed\n",
    "\n",
    "tf.set_random_seed(seed)\n",
    "\n",
    "sess = tf.Session(graph=tf.get_default_graph(), config=session_conf)\n",
    "tf.keras.backend.set_session(sess)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import the MNIST dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "60000 train samples\n",
      "10000 test samples\n"
     ]
    }
   ],
   "source": [
    "batch_size = 512\n",
    "num_classes = 10\n",
    "epochs = 30\n",
    "\n",
    "# the data, shuffled and split between train and test sets\n",
    "(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()\n",
    "\n",
    "print(x_train.shape[0], 'train samples')\n",
    "print(x_test.shape[0], 'test samples')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Transformation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train.reshape((60000, 784), order='F') # reshaping order fixed to the same as BCD\n",
    "x_test = x_test.reshape((10000, 784), order='F') # reshaping order fixed to the same as BCD\n",
    "x_train = x_train.astype('float32')\n",
    "x_test = x_test.astype('float32')\n",
    "x_train /= 255\n",
    "x_test /= 255\n",
    "\n",
    "# convert class vectors to binary class matrices\n",
    "y_train = tf.keras.utils.to_categorical(y_train, num_classes)\n",
    "y_test = tf.keras.utils.to_categorical(y_test, num_classes)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# MLP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Setup"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Input -> 9 Fully Connected (600) + ReLU -> Fully Connected (10) -> Squared loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "hidden_dim = 600\n",
    "\n",
    "# model 1 (SGD)\n",
    "model = tf.keras.models.Sequential()\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, input_shape=(784,), activation='relu', use_bias=True, \n",
    "                                                          kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                                          bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model.add(tf.keras.layers.Dense(num_classes, activation=None, use_bias=True, \n",
    "                kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                bias_initializer=tf.keras.initializers.Constant(value=0.1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SGD Optimizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense (Dense)                (None, 600)               471000    \n",
      "_________________________________________________________________\n",
      "dense_1 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_2 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_3 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_4 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_5 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_6 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_7 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_8 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_9 (Dense)              (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_10 (Dense)             (None, 10)                6010      \n",
      "=================================================================\n",
      "Total params: 3,722,410\n",
      "Trainable params: 3,722,410\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "sgd = tf.keras.optimizers.SGD(lr=0.001, decay=0, momentum=0, nesterov=False)\n",
    "model.compile(loss='mean_squared_error', optimizer=sgd, metrics=['accuracy'])\n",
    "model.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# model 2 (Adam)\n",
    "model_2 = tf.keras.models.Sequential()\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, input_shape=(784,), activation='relu', use_bias=True, \n",
    "                                                          kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                                          bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(hidden_dim, activation='relu', use_bias=True, \n",
    "                                        kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                                        bias_initializer=tf.keras.initializers.Constant(value=0.1)))\n",
    "model_2.add(tf.keras.layers.Dense(num_classes, activation=None, use_bias=True, \n",
    "                kernel_initializer=tf.keras.initializers.RandomNormal(mean=0.0, stddev=0.01, seed=seed), \n",
    "                bias_initializer=tf.keras.initializers.Constant(value=0.1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adam Optimizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "_________________________________________________________________\n",
      "Layer (type)                 Output Shape              Param #   \n",
      "=================================================================\n",
      "dense_11 (Dense)             (None, 600)               471000    \n",
      "_________________________________________________________________\n",
      "dense_12 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_13 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_14 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_15 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_16 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_17 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_18 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_19 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_20 (Dense)             (None, 600)               360600    \n",
      "_________________________________________________________________\n",
      "dense_21 (Dense)             (None, 10)                6010      \n",
      "=================================================================\n",
      "Total params: 3,722,410\n",
      "Trainable params: 3,722,410\n",
      "Non-trainable params: 0\n",
      "_________________________________________________________________\n"
     ]
    }
   ],
   "source": [
    "adam = tf.keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)\n",
    "model_2.compile(loss='mean_squared_error', optimizer=adam, metrics=['accuracy'])\n",
    "model_2.summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Fit the Model using Back Propagation (Vanilla SGD)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SGD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/30\n",
      " - 1s - loss: 0.0906 - acc: 0.0903 - val_loss: 0.0905 - val_acc: 0.0892\n",
      "Epoch 2/30\n",
      " - 1s - loss: 0.0904 - acc: 0.0903 - val_loss: 0.0903 - val_acc: 0.0892\n",
      "Epoch 3/30\n",
      " - 1s - loss: 0.0902 - acc: 0.0903 - val_loss: 0.0902 - val_acc: 0.0892\n",
      "Epoch 4/30\n",
      " - 1s - loss: 0.0902 - acc: 0.0943 - val_loss: 0.0901 - val_acc: 0.0958\n",
      "Epoch 5/30\n",
      " - 1s - loss: 0.0901 - acc: 0.0986 - val_loss: 0.0901 - val_acc: 0.0958\n",
      "Epoch 6/30\n",
      " - 1s - loss: 0.0901 - acc: 0.0986 - val_loss: 0.0901 - val_acc: 0.0958\n",
      "Epoch 7/30\n",
      " - 1s - loss: 0.0900 - acc: 0.0993 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 8/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 9/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 10/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 11/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 12/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 13/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 14/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 15/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 16/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 17/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 18/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 19/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 20/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 21/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 22/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 23/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 24/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 25/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 26/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 27/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 28/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 29/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Epoch 30/30\n",
      " - 1s - loss: 0.0900 - acc: 0.1124 - val_loss: 0.0900 - val_acc: 0.1135\n",
      "Test loss: 0.08996873377561569\n",
      "Test accuracy: 0.1135\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x_train, y_train,\n",
    "                    batch_size=batch_size,\n",
    "                    epochs=epochs,\n",
    "                    verbose=2,\n",
    "                    validation_data=(x_test, y_test),\n",
    "                    shuffle=False)\n",
    "score = model.evaluate(x_test, y_test, verbose=0)\n",
    "print('Test loss:', score[0])\n",
    "print('Test accuracy:', score[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adam"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/30\n",
      " - 2s - loss: 0.0903 - acc: 0.1043 - val_loss: 0.0901 - val_acc: 0.1010\n",
      "Epoch 2/30\n",
      " - 1s - loss: 0.0901 - acc: 0.1064 - val_loss: 0.0900 - val_acc: 0.1028\n",
      "Epoch 3/30\n",
      " - 1s - loss: 0.0890 - acc: 0.1336 - val_loss: 0.0816 - val_acc: 0.2072\n",
      "Epoch 4/30\n",
      " - 1s - loss: 0.0705 - acc: 0.3586 - val_loss: 0.0632 - val_acc: 0.4510\n",
      "Epoch 5/30\n",
      " - 1s - loss: 0.0521 - acc: 0.5492 - val_loss: 0.0478 - val_acc: 0.5870\n",
      "Epoch 6/30\n",
      " - 1s - loss: 0.0437 - acc: 0.6377 - val_loss: 0.0387 - val_acc: 0.6745\n",
      "Epoch 7/30\n",
      " - 1s - loss: 0.0306 - acc: 0.7728 - val_loss: 0.0228 - val_acc: 0.8454\n",
      "Epoch 8/30\n",
      " - 1s - loss: 0.0188 - acc: 0.9009 - val_loss: 0.0144 - val_acc: 0.9184\n",
      "Epoch 9/30\n",
      " - 1s - loss: 0.0112 - acc: 0.9385 - val_loss: 0.0106 - val_acc: 0.9409\n",
      "Epoch 10/30\n",
      " - 1s - loss: 0.0091 - acc: 0.9480 - val_loss: 0.0102 - val_acc: 0.9420\n",
      "Epoch 11/30\n",
      " - 1s - loss: 0.0081 - acc: 0.9528 - val_loss: 0.0078 - val_acc: 0.9538\n",
      "Epoch 12/30\n",
      " - 1s - loss: 0.0063 - acc: 0.9634 - val_loss: 0.0064 - val_acc: 0.9630\n",
      "Epoch 13/30\n",
      " - 1s - loss: 0.0058 - acc: 0.9658 - val_loss: 0.0063 - val_acc: 0.9627\n",
      "Epoch 14/30\n",
      " - 1s - loss: 0.0050 - acc: 0.9705 - val_loss: 0.0056 - val_acc: 0.9674\n",
      "Epoch 15/30\n",
      " - 1s - loss: 0.0048 - acc: 0.9715 - val_loss: 0.0060 - val_acc: 0.9641\n",
      "Epoch 16/30\n",
      " - 1s - loss: 0.0043 - acc: 0.9751 - val_loss: 0.0053 - val_acc: 0.9678\n",
      "Epoch 17/30\n",
      " - 1s - loss: 0.0039 - acc: 0.9770 - val_loss: 0.0060 - val_acc: 0.9650\n",
      "Epoch 18/30\n",
      " - 1s - loss: 0.0036 - acc: 0.9790 - val_loss: 0.0051 - val_acc: 0.9690\n",
      "Epoch 19/30\n",
      " - 1s - loss: 0.0035 - acc: 0.9797 - val_loss: 0.0053 - val_acc: 0.9679\n",
      "Epoch 20/30\n",
      " - 1s - loss: 0.0032 - acc: 0.9811 - val_loss: 0.0050 - val_acc: 0.9702\n",
      "Epoch 21/30\n",
      " - 1s - loss: 0.0031 - acc: 0.9818 - val_loss: 0.0046 - val_acc: 0.9728\n",
      "Epoch 22/30\n",
      " - 1s - loss: 0.0027 - acc: 0.9842 - val_loss: 0.0046 - val_acc: 0.9724\n",
      "Epoch 23/30\n",
      " - 1s - loss: 0.0025 - acc: 0.9852 - val_loss: 0.0049 - val_acc: 0.9707\n",
      "Epoch 24/30\n",
      " - 1s - loss: 0.0028 - acc: 0.9841 - val_loss: 0.0050 - val_acc: 0.9720\n",
      "Epoch 25/30\n",
      " - 1s - loss: 0.0028 - acc: 0.9837 - val_loss: 0.0043 - val_acc: 0.9744\n",
      "Epoch 26/30\n",
      " - 1s - loss: 0.0025 - acc: 0.9861 - val_loss: 0.0048 - val_acc: 0.9722\n",
      "Epoch 27/30\n",
      " - 1s - loss: 0.0024 - acc: 0.9863 - val_loss: 0.0047 - val_acc: 0.9724\n",
      "Epoch 28/30\n",
      " - 1s - loss: 0.0021 - acc: 0.9877 - val_loss: 0.0045 - val_acc: 0.9743\n",
      "Epoch 29/30\n",
      " - 1s - loss: 0.0020 - acc: 0.9884 - val_loss: 0.0043 - val_acc: 0.9750\n",
      "Epoch 30/30\n",
      " - 1s - loss: 0.0022 - acc: 0.9876 - val_loss: 0.0046 - val_acc: 0.9729\n",
      "Test loss: 0.004627080126502551\n",
      "Test accuracy: 0.9729\n"
     ]
    }
   ],
   "source": [
    "history_2 = model_2.fit(x_train, y_train,\n",
    "                    batch_size=batch_size,\n",
    "                    epochs=epochs,\n",
    "                    verbose=2,\n",
    "                    validation_data=(x_test, y_test),\n",
    "                    shuffle=False)\n",
    "score_2 = model_2.evaluate(x_test, y_test, verbose=0)\n",
    "print('Test loss:', score_2[0])\n",
    "print('Test accuracy:', score_2[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Loss and Accuracy Plots"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SGD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f9a384d1f60>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZIAAAEWCAYAAABMoxE0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8lOW9///XJwuEHSRsgkdQaVERkU3UKC7VQoti3ZDj3qrVX1HraV2OtbVq9WitWm09HK1K1aJItW79Ih42t6PFABpQ9irWAJJAAglkgSSf3x9zJ05CljvLZDLk/Xw85jEz99z3NdedgfnMdV339bnM3REREWmqpHhXQEREEpsCiYiINIsCiYiINIsCiYiINIsCiYiINIsCiYiINIsCibQ7ZjbMzMriXY94MbNXzGxiK7/nBWb259Z8T2k9CiTSJpjZrqhbhZkVRz2/KN71ixUz+zo41x41tq82Mzez/sHz2WZ2ey3HpwX77Q7+Vtlmdr+Z1fp/28zGAkPcfV7U8Y+a2abg+M/N7P4ax1xiZkuD99hqZh+a2dVRr882s1IzKwxuK8zsbjPrGlXMS8BxZvbtJv+xpM1SIJE2wd27Vt6AfwFnRm2bFe/6NZeZJdX15U7kfC+I2nccjf+/+e3gb/dd4EfApXXsdw3wXNTzO4DDgVFAN+A7wIqouvwCuB/4DdAPGABcF+wX7W537wb0Aa4CTgHeM7M0AHevAOYEr8l+RoFEEoKZJZvZL4NfzNvMbJaZ9QxeG2ZmZWZ2RfCLPNfMbmpE2T82szXBr+kNZvbDqNc2mNnpUc/TzGynmR0ePD/RzJaY2Q4zW25mJ0Tt+w8zu8vMlgBFwIF1VOE5qn/xXwo8G7b+0dz9M+BDYHgdu0wC3ol6PhZ42d23esTnlYHbzNKBXwJXufur7r7L3Svcfam7X1BL2bh7ibsvAc4EBgEXR738NvD9ppyXtG0KJJIobgLOADKIfEHtBR6Oej0ZGAMcBnwPuMfMDglZ9hYiX7Ddifxif8zMjgxee5bqX4ZTgHXuvtrMBgOvAr8ADgBuB141s15R+19MJDB0A76u4/3fAQaZ2SFmlgqcC7wQsu7VmNlRwHHAx7W81ptIi2Jt1OZ/ALeY2TVR51wpA3BgbmPr4e75wGLgxKjNq4FhZtaxseVJ26ZAIonix8Ct7r7Z3UuAO4GpZmZR+9wR/CLOBNYAI8IU7O6vu/sXwS/yBUS+2DOCl58FzjazzsHzS/ima+gy4G/uviD4pT4XWEUk4FV60t3Xuvted69rgN+BWUHZ3weWAjlh6h7lMzPLB/4G/AF4vpZ9egb3u6K23Qn8PjiX5UGLblrwWjqw1aMS8gWtrh3BuM64Buq0mUiArVQY3PeoZV9JYCnxroBIQ4JgcRAw18yis4wmAb2Dx+Xuvi3qtSKga/Drd3vU9n1aKWZ2FpHWxGFBmZ2B9wDcfaOZfQxMMbMFwKlAZdfXwcA0Mzs/qrhUqndhfRXyNJ8F/h9wNE3r1jrS3bMb2Cc/uO9K8KXu7nuBR4BHgmB5DfCsmX1E5O/Wz8ysMpi4+ygAM9tGwz9EBwJ5Uc+7Bfc7w52SJAq1SKTNC77ENgGnunvPqFtajeBR27Gl0QP57l7tl76ZdQH+CtwN9HX3nsAiILql8wyRLqoLgUVRZXxFpMURXacu7h7d5RYqvba7ryPyxX0y8HqYYxrL3fOI/B2/VcfrRe7+EFAKDAPeJ/J3+F5j3ysYvzqZICAHDgfWuHtpY8uTtk2BRBLF/wD3mdlBAGbW18zObIFyOxFpReQAFUHr5OQa+7xEpKvrWqq3Fp4Bzjez04KLAToFj/s3sS6XAKfV80WbEgz2V95Sm/Aec4EJlU/M7GfBBQNpZpYaXNabDGS5ey5wL/AnMzvbzLoGV5+NAtJqKzwoZxzwGpGurb9EvTwBeLMJdZY2ToFEEsVvgQXAIjMrBD4gcslqswQtmp8DbxBpEZxNjcFldy8MXh9IVGvB3T8nMjB+J7AN+BK4gSb+v3L39e6+zyB5lDuA4qhbU76UH6f6xQOlwKPAViLB9Arg7MpuMne/C7iNyNVbOUQuGHgMuJ7IWE6lXwafyzbgaeD/gBOD8azK7smpwBNNqLO0caaFrUQaZmb3Eun6ujLedWkuM/sb8ETlpMRWes/zicwNqmt+iyQwBRKRBphZHyCLyC/1j+JdH5G2Rl1bIvUws+nARuCvCiIitVOLREREmkUtEhERaZZ2MSExPT3dBw8eHO9qiIgklGXLlm1z9z4N7dcuAsngwYNZunRpwzuKiEgVM/syzH7q2hIRkWZRIBERkWZRIBERkWZRIBERkWZRIBERkWZRIBERkWZRIBERkWZpF/NIpAnW/S9kZ8a7FiLSXBNuhuSmLF0TngKJ1O7//Qfs/IrqCwWKSMI58WcKJBInRdvhuOnw3XviXRMRaeM0RiL72lsCe4ugU69410REEoACieyrOC9y3/mA+NZDRBKCAonsqzg/ct9JgUREGqZAIvsqClok6toSkRAUSGRf6toSkUZQIJF9qWtLRBpBl//KvhrRtbW3vILML/IoLa+IcaVEpClOGtqH5KTYzgdTIJF9FedBShp06Nzgrm9++jXXv/BxK1RKRJpizd0TSU5Kjul7KJDIvorzQ3drfZVXBMCcHx9HarJmwYu0NR2SYz+CoUAi+yrKD33FVm5hKd06pjBuiMZTRNorDbbLvorzQl+xlVNYQt/uHWNcIRFpyxRIZF/F4VskOQWl9O2WFuMKiUhbpkAi+yrKCx1ItqpFItLuKZBIde6RFkmIri13D1okCiQi7ZkCiVS3ZxdU7A3VIikoKaO0rEJdWyLtnAKJVFc1GbHhFkluYQmAurZE2jkFEqmuMj1KiK6tnIJSALVIRNo5BRKprjh8epStapGICAokUlMjura+aZEokIi0ZwokUl1jurYKS+mUmkzXjkqQINKeKZBIdZWBJK1ng7vmFJbSt3tHzJRjS6Q9UyCR6oryoEM3SOnQ4K45BSX000C7SLunQCLVFedD5/AJG/tooF2k3VMgkeqKG5EepaBEA+0iEttAYmYTzWytmW0ws1tref0kM1tuZmVmdl6N1+aZ2Q4z+3uN7UPMbImZrTezF82s4T4YCa8oL9QVW7tLy9i9p1xzSEQkdoHEzJKBx4BJwBHANDM7osZu/wIuB56vpYgHgEtq2X4/8LC7DwXygR+1VJ2F0Hm2cgp16a+IRMSyRTIO2ODun7v7HmA2MCV6B3ff6O4rgH0W/Hb3hUBh9DaLXB50KvBSsOkZ4OwY1L39Ctm1lVMQmYzYr7taJCLtXSwDyUDgq6jn2cG25ugN7HD3sobKNLOrzWypmS3Nzc1t5tu2ExXlULwj3GTEyhaJBttF2r1YBpLaJhd4a5Xp7k+4+xh3H9OnT59mvm07UbIT8FBdW1uDFom6tkQkloEkGzgo6vkgYHMzy9wG9DSzyqnULVGmVKqcjBiiayu3sJQOKUn06JQa40qJSFsXy0CSCQwNrrLqAFwIvN6cAt3dgcVA5RVelwGvNauW8o3G5NkqLKVPV81qF5EYBpJgHGM68BawGpjj7p+Z2V1mdhaAmY01s2zgfOBxM/us8ngzew/4K3CamWWb2XeDl24B/sPMNhAZM3kqVufQ7jQqz1YJ/TQ+IiJATLPtuftcYG6Nbb+KepxJpHuqtmNPrGP750SuCJOW1ogU8jkFpRzap2uMKyQiiUAz2+UbRY1Yi6SgRFdsiQigQCLRivMBazDzb8necgpKynTFlogACiQSrTgPOvWEpPr/WeQWaoldEfmGAol8I2SerZxgiV1l/hURUCCRaGHzbAVL7GotEhEBBRKJFjLPVtWsdrVIRAQFEolWnB96MmJKknFAZ2XwFxEFEolWlB9uDklhKeldO5KUpFntIqJAIpXK9sCewtBrkahbS0QqKZBIRMmOyH3ItUh06a+IVFIgkYhGzGrPVYtERKIokEhEZZ6tBrq29pRVsH33Hs1qF5EqCiQSUbUWSf2BZNsuzWoXkeoUSCQiZNdW1RK7apGISECBRCJCdm3laDKiiNSgQCIRxfmQlAod6l9jpLJF0q+7urZEJEKBRCKKgvQoDSydm1NQghn07qJZ7SISoUAiEcV5oScj9u7SkZRk/dMRkQh9G0hE8Y7QebY00C4i0RRIJKIoXObfnEItsSsi1SmQSERxHnQOkx6lVOuQiEg1CiQSESKFfHmFs22X0qOISHUKJAJ7iqCspMGure27SqlwTUYUkeoUSCT8ZMRgDkkfdW2JSBQFEgmdZyunULPaRWRfCiQSPs9WgfJsici+FEikCV1bCiQi8g0FEgndtbW1oIRenVPpmJLcCpUSkUShQCKNSiGvdUhEpCYFEom0SFI7Q2r9QSJHS+yKSC0USCTUZESA3IISjY+IyD5iGkjMbKKZrTWzDWZ2ay2vn2Rmy82szMzOq/HaZWa2PrhdFrX97aDMT4Jb31ieQ7sQIs9WRYWTu6tU65CIyD5SYlWwmSUDjwGnA9lAppm97u6ronb7F3A58PMaxx4A3AGMARxYFhwbjApzkbsvjVXd250Qebbyi/awt9x16a+I7COWLZJxwAZ3/9zd9wCzgSnRO7j7RndfAVTUOPa7wHx3zwuCx3xgYgzr2r6F6Nr6Zq12tUhEpLpYBpKBwFdRz7ODbS1x7MygW+uXZrUv6WdmV5vZUjNbmpub25h6tz8huraqAokG20WkhlgGktq+4L0Fjr3I3Y8CTgxul9RWgLs/4e5j3H1Mnz59Qr5tO+QeaZE0NBmxIEiPoq4tEakhloEkGzgo6vkgYHNzj3X3TcF9IfA8kS40aarSAvDy8C0SdW2JSA2xDCSZwFAzG2JmHYALgddDHvsWcIaZ9TKzXsAZwFtmlmJm6QBmlgpMBj6NQd3bj6rJiA23SLqlpdCpg2a1i0h1MQsk7l4GTCcSFFYDc9z9MzO7y8zOAjCzsWaWDZwPPG5mnwXH5gF3EwlGmcBdwbaORALKCuATYBPwp1idQ7tQmR4lRJ4tdWuJSG1idvkvgLvPBebW2ParqMeZRLqtajv2aeDpGtt2A6NbvqbtWLHSo4hI82hme3tXFH4tEl2xJSK1USBp70J0bbk7OQXq2hKR2imQtHeVXVtpPevcpaCkjNKyCqVHEZFaKZC0d0V50LEHJNc9XFY5h0QJG0WkNg0GEjObHlyCK/uj4vwG82xpDomI1CdMi6Q/kYSLc4JsvrWmJJEEVRwmPUowq12D7SJSiwYDibvfDgwFniKSqXe9md1rZofGuG7SGoryQkxGrGyRKJCIyL5CjZG4uwNfB7cyoBfwkpn9NoZ1k9YQJs9WYSmdOyTTtWNMpx2JSIJq8JvBzK4HLgO2AU8CN7n7XjNLAtYDN8e2ihJTIbq2thaU0LdbR9SrKSK1CfMTMx04x92/jN7o7hVmNjk21ZJWUV4GJTtDrUWigXYRqUuYrq25QF7lEzPrZmbHArj76lhVTFpByc7IfQNdW7mFpfTRQLuI1CFMIJkB7Ip6vjvYJokubJ6toGtLRKQ2YQKJBYPtQKRLixgne5RWEiKF/K7SMnbvKVfXlojUKUwg+dzMrjez1OB2A/B5rCsmraAqz1bdLZLKWe391LUlInUIE0iuAY4nsvZHNnAscHUsKyWtJETXlma1i0hDGuyicvccIqsbyv4mRNdWVSBRi0RE6hBmHkka8CPgSKDqZ6m7/zCG9ZLWUJwPlgxpPercpbJrS4PtIlKXMF1bzxHJt/Vd4B0iKxoWxrJS0kqK86BTT6hnomFuYSkdUpLo0Sm1FSsmIokkTCA5zN1/Cex292eA7wNHxbZa0ipC5NnSrHYRaUiYQLI3uN9hZsOBHsDgmNVIWk/IPFvq1hKR+oQJJE8E65HcDrwOrALuj2mtpHWESiGv9CgiUr96B9uDxIwF7p4PvAsc0iq1ktZRvAP61d9LmVNQwvGH9m6lColIIqq3RRLMYp/eSnWR1lZUf4ukZG85BSVl6toSkXqF6dqab2Y/N7ODzOyAylvMayaxVVYKe3fXO6s9V5MRRSSEMDmzKueL/CRqm6NursRWmR6lnqu2thZoiV0RaViYme1DWqMi0sqKlB5FRFpGmJntl9a23d2fbfnqSKupzLNVz+W/OWqRiEgIYbq2xkY9TgNOA5YDCiSJLETXVk5hKSlJxgGdO7RSpUQkEYXp2rou+rmZ9SCSNkUSWciurfSuHUlK0qx2EalbmKu2aioChrZ0RaSVheja2lpQonVIRKRBYcZI3iBylRZEAs8RwJxYVkpaQXE+JHeE1M517pJbWMqgXnW/LiIC4cZIfhf1uAz40t2zY1QfaS2VkxHrScaYU1jKqIPrT6EiIhKma+tfwBJ3f8fd/w/YbmaDwxRuZhPNbK2ZbTCzW2t5/SQzW25mZWZ2Xo3XLjOz9cHtsqjto81sZVDmo6a0tE3TQMLGPWUV5O3eo1ntItKgMIHkr0BF1PPyYFu9zCwZeAyYRKQ7bJqZHVFjt38BlwPP1zj2AOAOIsv6jgPuCBJHAswgstTv0OA2McQ5SE3F+fVesbVtl+aQiEg4YQJJirvvqXwSPA5zPeg4YIO7fx4cMxuYEr2Du2909xVUD1QQWURrvrvnBQkj5wMTzWwA0N3dP3R3J3IJ8tkh6iI1FQWLWtVhq1ZGFJGQwgSSXDM7q/KJmU0BtoU4biDwVdTz7GBbGHUdOzB43GCZZna1mS01s6W5ubkh37YdKc6rfzJiMKu9X3e1SESkfmECyTXAbWb2LzP7F3AL8OMQx9U2duG1bGvMsaHLdPcn3H2Mu4/p06dPyLdtJ9wb7NqqSo+iy39FpAFhJiT+ExhvZl0Bc/ew67VnAwdFPR8EbG7EsSfXOPbtYPugJpYplfbshvI99U5GzC0owQx6d9GsdhGpX4MtEjO718x6uvsudy80s15m9psQZWcCQ81siJl1AC4kssJiGG8BZwTv1Qs4A3jL3bcAhWY2Prha61LgtZBlSqUwebYKS+ndpSMpyU2Zsyoi7UmYb4lJ7r6j8kkw+P29hg5y9zIii2K9BawG5rj7Z2Z2V+WYi5mNNbNs4HzgcTP7LDg2D7ibSDDKBO4KtgFcCzwJbAD+CbwZ6kzlGyHzbGmgXUTCCDMhMdnMOrp7KYCZdQJCfcO4+1xgbo1tv4p6nEn1rqro/Z4Gnq5l+1JgeJj3lzo0kGdrZ9Fevti2m8G9NatdRBoWJpD8BVhoZjOD51cAz8SuShJzdXRt5RaW8tT7X/CXf3zJrtIyLj9+cOvXTUQSTpjB9t+a2QrgO0SumpoHHBzrikkM1eja2rSjmCfe+SezM79iT3kF3z9qANeefChHHtgjjpUUkUQRpkUC8DWRSYMXAF8AL8esRhJ7RZFA8s/dqfzPvCxe+XgTAOeMGsg1Ew7lkD5d41k7EUkwdQYSM/sWkSutpgHbgReJXP57SivVTWJke+4WulgnvvPIh3RITuLi8Qdz1UmHMLBnp3hXTUQSUH0tkjXAe8CZ7r4BwMxubJVaSaO8nrWZ5V/mh9r3i227OeuLdYxP6sq1Ew7lhxlDSO+qq7NEpOnqCyTnEmmRLDazeURyZSnTbhtTsrecW19eQXmFk5aa3OD+XTumMLqP0z+1PzdPHNYKNRSR/V2dgcTdXwFeMbMuRBIj3gj0M7MZwCvu/r+tVEepx5Iv8ijaU87My8dyyrC+4Q568l7o0Du2FRORdqPBCYnuvtvdZ7n7ZCJzPj4B9llbROJj0eqtpKUmcdyhjQgMDeTZEhFpjEblvwjSuj/u7qfGqkISnruzcE0OGYelh+rWqlK5OqKISAtQIqUEtj5nF9n5xZw6rF/4gyoqoGRHvXm2REQaQ4EkgS1cnQPAqWHHRgBKd4JXqEUiIi1GgSSBLVqzlSMGdKd/j0YsPlWVZ0stEhFpGQokCSp/9x6WfZnPaYc3ojUCUBwkclbXloi0EAWSBPXOulwqvJHdWvBNwkZ1bYlIC1EgSVAL1+TQu0sHjh7Us3EHqmtLRFqYAkkCKiuv4J21OZwyrC9JSY1MNlCZ+VddWyLSQhRIEtCyL/MpKCnjtMZ2a0HQtWWQphTxItIyFEgS0KI1OaQmGxlD0xt/cFFeJIgkNWICo4hIPRRIEtDCNTkcO6Q33dJSG39wcb66tUSkRSmQJJgvt+9mQ86uxl+tValY6VFEpGUpkCSYRWsis9kbPX+kUlGertgSkRalQJJgFq3J4dA+XTi4d5emFaCuLRFpYQokCWRXaRn/+Hw7px3eiCSNNRXnq2tLRFqUAkkCeX99LnvLvenjI+V7obRAXVsi0qIUSBLIwtU5dE9LYfTBTWxRKM+WiMSAAkmCqKhwFq/NYcK3+5Ka3MSPTXm2RCQGFEgSxIpNO9m2aw+nDuvT9EKKFEhEpOWlxLsCUofifFjyOJSVAlD6RR43p+Qx8eslsKCJs9Lzv4jcq2tLRFqQAklbtfIlePu/ICkFMEZVOKNSIDWzkUkaa+raH3oNbokaiogACiRt15Ys6NwbbvonXxeUMv6/FnLzxG/z/518WLxrJiJSjcZI2qotWTDgaDBj8dpgNvuwZswfERGJEQWStqisFHJWRwIJkct+B/bsxLf6dY1zxURE9hXTQGJmE81srZltMLNba3m9o5m9GLy+xMwGB9s7mNlMM1tpZllmdnLUMW8HZX4S3Jo4O68Ny1kFFXthwNGU7C3n/zZs47TD+2LWzPEREZEYiNkYiZklA48BpwPZQKaZve7uq6J2+xGQ7+6HmdmFwP3AVOAqAHc/KggUb5rZWHevCI67yN2XxqrucbclK3I/4Gg+/Hw7xXvLmz6bXUQkxmLZIhkHbHD3z919DzAbmFJjnynAM8Hjl4DTLPKz+whgIYC75wA7gDExrGvbsiULOvaAXkNYtDqHTqnJjD+kd7xrJSJSq1gGkoHAV1HPs4Ntte7j7mXATqA3kAVMMbMUMxsCjAYOijpuZtCt9Uuro7/HzK42s6VmtjQ3N7dlzqi1bMmCASNwItl+M4amk5aqFQ1FpG2KZSCp7QveQ+7zNJHAsxT4PfABUBa8fpG7HwWcGNwuqe3N3f0Jdx/j7mP69GnGbPDWVr4Xvv4UBhzN2q2FbNpR3LS12UVEWkksA0k21VsRg4DNde1jZilADyDP3cvc/UZ3H+nuU4CewHoAd98U3BcCzxPpQtt/bFsH5aUw4GgWro5c9nuKAomItGGxDCSZwFAzG2JmHYALgddr7PM6cFnw+Dxgkbu7mXU2sy4AZnY6UObuq4KurvRgeyowGfg0hufQ+qIG2hetyeGogT3o1z0tvnUSEalHzK7acvcyM5sOvAUkA0+7+2dmdhew1N1fB54CnjOzDUAekWAD0Bd4y8wqgE18033VMdieGpS5APhTrM4hLrZkQWpn8tL+jeX/2sD1pw6Nd41EROoV0xQp7j4XmFtj26+iHpcA59dy3Ebg27Vs301k4H3/tSUL+h/FonXbcUeX/YpIm6eZ7W1JRQVsWQEDjmbep1s4sEcaIwb1iHetRETqpUDSluT9E/bupjh9OO+u28bE4QM0m11E2jwFkrYkGGj/R/Eg9pRX8L2j+se5QiIiDVMa+bZkyyeQ3JE5X3ahbzdn1L9pJUMRafvUImlLtmRR3vcIFq3LZ9Lw/iQlqVtLRNo+BZK2wh22ZJGd9i1KyyqYdNSAeNdIRCQUBZK2YseXULKT/9s9kPSuHRg7WOuqi0hiUCBpK4KB9r9tSee7R/YnWd1aIpIgFEjaii1ZVFgKK/ceyPfUrSUiCURXbbUVW7LY3OFgOlsXjh2ibi0RSRxqkbQF7vjmT8gsOYjvHtmflGR9LCKSOPSN1RYUbsGKtvFx2cG6WktEEo4CSVsQDLRvTB3K8YdqSV0RSSwaI2kDyjZ9QhLGoMPHkqpuLYmhvXv3kp2dTUlJSbyrIm1IWloagwYNIjU1tUnHK5C0Afn/zGRHxYF85+gh8a6K7Oeys7Pp1q0bgwcPVkJQAcDd2b59O9nZ2QwZ0rTvIP38bQNSt65grQ3hhMPS410V2c+VlJTQu3dvBRGpYmb07t27Wa1UBZI421uwlZ5luZT1G0HHlOR4V0faAQURqam5/yYUSOJszcfvAzDw8PFxromISNMokMTZptVLADhqzIlxrolI7G3fvp2RI0cycuRI+vfvz8CBA6ue79mzJ1QZV1xxBWvXrq13n8cee4xZs2a1RJUlBA22x1FZeQUpX2eRm3ogfbppNrvs/3r37s0nn3wCwK9//Wu6du3Kz3/+82r7uDvuTlJS7b9zZ86c2eD7/OQnP2l+ZVtZWVkZKSmJ+ZWcmLXeT3y0MY+hFZ9T1ndUvKsi7dCdb3zGqs0FLVrmEQd2544zj2z0cRs2bODss88mIyODJUuW8Pe//50777yT5cuXU1xczNSpU/nVr34FQEZGBn/84x8ZPnw46enpXHPNNbz55pt07tyZ1157jb59+3L77beTnp7OT3/6UzIyMsjIyGDRokXs3LmTmTNncvzxx7N7924uvfRSNmzYwBFHHMH69et58sknGTlyZLW63XHHHcydO5fi4mIyMjKYMWMGZsa6deu45ppr2L59O8nJyfztb39j8ODB3HvvvbzwwgskJSUxefJk7rnnnqo6jxw5kq+//pqMjAw2bNjAk08+yYIFC9i1axelpaW8/PLLnH322ezYsYOysjLuvfdeJk+eDEQC6MMPP4yZMWrUKB5++GFGjRrFunXrSElJYceOHRxzzDFs2LCB5OTWHW9V11YcLf54HQcn5ZA+dFy8qyISd6tWreJHP/oRH3/8MQMHDuS+++5j6dKlZGVlMX/+fFatWrXPMTt37mTChAlkZWVx3HHH8fTTT9datrvz0Ucf8cADD3DXXXcB8Ic//IH+/fuTlZXFrbfeyscff1zrsTfccAOZmZmsXLmSnTt3Mm/ePACmTZvGjTfeSFZWFh988AF9+/bljTfe4M033+Sjjz4iKyuLn/3sZw2e94cffshzzz3H/Pnz6dSpE6+99hrLly9nwYIF3HjjjQBkZWVx//338/bbb5OVlcWDDz5Iz549OeGEE6rq8/zzz3PBBRe0ehABtUjiprzCyQ7GR1IPOibxTJswAAASfElEQVTOtZH2qCkth1g69NBDGTt2bNXzF154gaeeeoqysjI2b97MqlWrOOKII6od06lTJyZNmgTA6NGjee+992ot+5xzzqnaZ+PGjQC8//773HLLLQAcffTRHHlk7X+PhQsX8sADD1BSUsK2bdsYPXo048ePZ9u2bZx55plAZEIfwIIFC/jhD39Ip06dADjggIa7rM844wx69Yosq+3u3HLLLbz//vskJSXx1VdfsW3bNhYtWsTUqVOryqu8v/LKK3n00UeZPHkyM2fO5Lnnnmvw/WJBgSROln2Zz6CSdZAK9D863tURibsuXbpUPV6/fj2PPPIIH330ET179uTiiy+udZ5Dhw4dqh4nJydTVlZWa9kdO3bcZx93b7BORUVFTJ8+neXLlzNw4EBuv/32qnrUdsmsu9e6PSUlhYqKCoB9ziP6vJ999ll27tzJ8uXLSUlJYdCgQZSUlNRZ7oQJE5g+fTqLFy8mNTWVYcOGNXhOsaCurTiZu3ILI5I3UtF9EHRRfi2RaAUFBXTr1o3u3buzZcsW3nrrrRZ/j4yMDObMmQPAypUra+06Ky4uJikpifT0dAoLC3n55ZcB6NWrF+np6bzxxhtAJDgUFRVxxhln8NRTT1FcXAxAXl4eAIMHD2bZsmUAvPTSS3XWaefOnfTt25eUlBTmz5/Ppk2bAPjOd77D7Nmzq8qrvAe4+OKLueiii7jiiiua9fdoDgWSOKiocOZ9+jVjO35F0oEjGz5ApJ0ZNWoURxxxBMOHD+eqq67ihBNOaPH3uO6669i0aRMjRozgwQcfZPjw4fTo0aPaPr179+ayyy5j+PDh/OAHP+DYY4+tem3WrFk8+OCDjBgxgoyMDHJzc5k8eTITJ05kzJgxjBw5kocffhiAm266iUceeYTjjz+e/Pz8Out0ySWX8MEHHzBmzBj++te/MnToUABGjBjBzTffzEknncTIkSO56aabqo656KKL2LlzJ1OnTm3JP0+jWJjmXaIbM2aML126NN7VqLLsy3wunbGQT9OuxE65DSbcHO8qSTuxevVqDj/88HhXo00oKyujrKyMtLQ01q9fzxlnnMH69esT7hLc2bNn89Zbb4W6LLo+tf3bMLNl7j6moWMT6y+2n5j36RZGpHyF4TBA4yMi8bBr1y5OO+00ysrKcHcef/zxhAsi1157LQsWLKi6citeEuuvth9wd+au/Jqf9M2FPBRIROKkZ8+eVeMWiWrGjBnxrgKgMZJWt3LTTjbtKOb4ztnQtR906x/vKomINItaJPXYkLOL0rLyFi1zduZXpCQZB5WuV2tERPYLMQ0kZjYReARIBp509/tqvN4ReBYYDWwHprr7RjPrADwOjAEqgBvc/e3gmNHAn4FOwNzgtZhcMXDtX5axPmdXi5d7+tDuJGevhcO/3+Jli4i0tpgFEjNLBh4DTgeygUwze93doy/W/hGQ7+6HmdmFwP3AVOAqAHc/ysz6Am+a2Vh3rwBmAFcD/yASSCYCb8biHH591pHsKq19glNzjEv9Ap4vV4tERPYPlZk2W/oGHAe8FfX8P4H/rLHPW8BxweMUYBtgRALQxVH7LQTGAQOANVHbpwGPN1SX0aNHe5vy0ZPud3R3z/8y3jWRdmbVqlVxff8JEyb4vHnzqm17+OGH/dprr633uC5duri7+6ZNm/zcc8+ts+zMzMx6y3n44Yd99+7dVc8nTZrk+fn5Yaq+36vt3waw1EN838dysH0g8FXU8+xgW637uHsZsBPoDWQBU8wsxcyGEOn6OijYP7uBMgEws6vNbKmZLc3NzW2B02lBW7KgUy/ocVC8ayLSqqZNm8bs2bOrbZs9ezbTpk0LdfyBBx5Y78zwhvz+97+nqKio6vncuXPp2bNnk8trbe5elWqlLYnlGEltazfWHMuoa5+ngcOBpcCXwAdAWcgyIxvdnwCegMiExHBVbiVbsiLdWlryVOLpzVvh65UtW2b/o2DSfXW+fN5553H77bdTWlpKx44d2bhxI5s3byYjI4Ndu3YxZcoU8vPz2bt3L7/5zW+YMmVKteM3btzI5MmT+fTTTykuLuaKK65g1apVHH744VVpSSAyvyIzM5Pi4mLOO+887rzzTh599FE2b97MKaecQnp6OosXL2bw4MEsXbqU9PR0HnrooarswVdeeSU//elP2bhxI5MmTSIjI4MPPviAgQMH8tprr1UlZaz0xhtv8Jvf/IY9e/bQu3dvZs2aRb9+/di1axfXXXcdS5cuxcy44447OPfcc5k3bx633XYb5eXlpKens3Dhwn3WZxk+fDh///vfAZg0aRKnnHIKH374Ia+++ir33XffPucHkJmZyQ033MDu3bvp2LEjCxcu5Hvf+x5/+MMfqtLjn3DCCcyYMYMRI0Y088P+RiwDSTaRVkSlQcDmOvbJNrMUoAeQFzSpbqzcycw+ANYD+UE59ZXZtpXtgZxVMP7aeNdEpNX17t2bcePGMW/ePKZMmcLs2bOZOnUqZkZaWhqvvPIK3bt3Z9u2bYwfP56zzjqrzvXEZ8yYQefOnVmxYgUrVqxg1Khv1vW55557OOCAAygvL+e0005jxYoVXH/99Tz00EMsXryY9PT0amUtW7aMmTNnsmTJEtydY489lgkTJtCrVy/Wr1/PCy+8wJ/+9CcuuOACXn75ZS6++OJqx2dkZPCPf/wDM+PJJ5/kt7/9LQ8++CB33303PXr0YOXKSMDOz88nNzeXq666infffZchQ4ZUy5tVl7Vr1zJz5kz++7//u87zGzZsGFOnTuXFF19k7NixFBQU0KlTJ6688kr+/Oc/8/vf/55169ZRWlraokEEYhtIMoGhQdfUJuBC4N9r7PM6cBnwIXAesMjd3cw6E0nfstvMTgfKPBikN7NCMxsPLAEuBf4Qw3NoeblroHyPBtol/uppOcRSZfdWZSCpbAW4O7fddhvvvvsuSUlJbNq0ia1bt9K/f+1zrd59912uv/56IJKLKvrLcc6cOTzxxBOUlZWxZcsWVq1aVe+X5/vvv88PfvCDqky855xzDu+99x5nnXUWQ4YMqfo1H52GPlp2djZTp05ly5Yt7NmzhyFDhgCRtPLRXXm9evXijTfe4KSTTqraJ0yq+YMPPpjx48fXe35mxoABA6pS8Xfv3h2A888/n7vvvpsHHniAp59+mssvv7zB92usmI2RBGMe04kMqK8G5rj7Z2Z2l5mdFez2FNDbzDYA/wHcGmzvCyw3s9XALcAlUUVfCzwJbAD+SYyu2IqZLVmR+wFK1ijt09lnn83ChQurVj+sbEnMmjWL3Nxcli1bxieffEK/fv1qTR0frbbWyhdffMHvfvc7Fi5cyIoVK/j+97/fYDlezwyCyhT0UHeq+uuuu47p06ezcuVKHn/88ar381rSv9e2Daqnmofq6eajU83XdX51ldu5c2dOP/10XnvtNebMmcO//3vN3/PNF9OZ7e4+192/5e6Huvs9wbZfufvrweMSdz/f3Q9z93Hu/nmwfaO7f9vdD3f377j7l1FlLnX34UGZ072+fwFt0ZYs6NANeg2Jd01E4qJr166cfPLJ/PCHP6w2yF6ZQj01NZXFixfz5Zdf1lMKnHTSScyaNQuATz/9lBUrVgCRFPRdunShR48ebN26lTff/Oa3Zrdu3SgsLKy1rFdffZWioiJ2797NK6+8woknnhj6nHbu3MnAgZHrfp555pmq7WeccQZ//OMfq57n5+dz3HHH8c477/DFF18A1VPNL1++HIDly5dXvV5TXec3bNgwNm/eTGZmJgCFhYVVQe/KK6/k+uuvZ+zYsaFaQI2lme31ef5CyK/9w2yyndmR1kiSstNI+zVt2jTOOeecat0+F110EWeeeWZVCvaGFmm69tprueKKKxgxYgQjR45k3LjIktVHH300xxxzDEceeSSHHHJItRT0V199NZMmTWLAgAEsXry4avuoUaO4/PLLq8q48sorOeaYY2rtxqrNr3/9a84//3wGDhzI+PHjq4LA7bffzk9+8hOGDx9OcnIyd9xxB+eccw5PPPEE55xzDhUVFfTt25f58+dz7rnn8uyzzzJy5EjGjh3Lt771rVrfq67z69ChAy+++CLXXXcdxcXFdOrUiQULFtC1a1dGjx5N9+7dY7ZmidLI12fef0LBppav0MiL4FvfbflyRRqgNPLt0+bNmzn55JNZs2YNSXX8iFUa+ViZ+F/xroGISLM8++yz/OIXv+Chhx6qM4g0lwKJiMh+7NJLL+XSSy+N6Xuoo16knWkP3dnSOM39N6FAItKOpKWlsX37dgUTqeLubN++nbS0tCaXoa4tkXZk0KBBZGdn0+byz0lcpaWlMWjQoIZ3rIMCiUg7kpqaWjWjWqSlqGtLRESaRYFERESaRYFERESapV3MbDezXCLrmlRKJ7Ia4/5kfzun/e18YP87p/3tfGD/O6fmns/B7t6noZ3aRSCpycyWhpn2n0j2t3Pa384H9r9z2t/OB/a/c2qt81HXloiINIsCiYiINEt7DSRPxLsCMbC/ndP+dj6w/53T/nY+sP+dU6ucT7scIxERkZbTXlskIiLSQhRIRESkWdpdIDGziWa21sw2mNmt8a5PSzCzjWa20sw+MbMmLAUZX2b2tJnlmNmnUdsOMLP5ZrY+uO8Vzzo2Vh3n9Gsz2xR8Tp+Y2ffiWcfGMLODzGyxma02s8/M7IZge0J+TvWcTyJ/Rmlm9pGZZQXndGewfYiZLQk+oxfNrEOLv3d7GiMxs2RgHXA6kA1kAtPcfVVcK9ZMZrYRGOPuCTmRysxOAnYBz7r78GDbb4E8d78vCPi93P2WeNazMeo4p18Du9z9d/GsW1OY2QBggLsvN7NuwDLgbOByEvBzqud8LiBxPyMDurj7LjNLBd4HbgD+A/ibu882s/8Bstx9Rku+d3trkYwDNrj75+6+B5gNTIlzndo9d38XyKuxeQrwTPD4GSL/yRNGHeeUsNx9i7svDx4XAquBgSTo51TP+SQsj9gVPE0Nbg6cCrwUbI/JZ9TeAslA4Kuo59kk+D+egAP/a2bLzOzqeFemhfRz9y0Q+U8P9I1zfVrKdDNbEXR9JUQ3UE1mNhg4BljCfvA51TgfSODPyMySzewTIAeYD/wT2OHuZcEuMfnOa2+BxGrZtj/07Z3g7qOAScBPgm4VaXtmAIcCI4EtwIPxrU7jmVlX4GXgp+5eEO/6NFct55PQn5G7l7v7SGAQkR6Yw2vbraXft70FkmzgoKjng4DNcapLi3H3zcF9DvAKkX9AiW5r0I9d2Z+dE+f6NJu7bw3+o1cAfyLBPqeg3/1lYJa7/y3YnLCfU23nk+ifUSV33wG8DYwHeppZ5SKGMfnOa2+BJBMYGlzF0AG4EHg9znVqFjPrEgwWYmZdgDOAT+s/KiG8DlwWPL4MeC2OdWkRlV+4gR+QQJ9TMJD7FLDa3R+KeikhP6e6zifBP6M+ZtYzeNwJ+A6RsZ/FwHnBbjH5jNrVVVsAweV8vweSgafd/Z44V6lZzOwQIq0QiCyd/HyinZOZvQCcTCTl9VbgDuBVYA7wb8C/gPPdPWEGr+s4p5OJdJk4sBH4ceX4QltnZhnAe8BKoCLYfBuRcYWE+5zqOZ9pJO5nNILIYHoykUbCHHe/K/iOmA0cAHwMXOzupS363u0tkIiISMtqb11bIiLSwhRIRESkWRRIRESkWRRIRESkWRRIRESkWRRIRJrIzMqjssR+0pLZpM1scHTmYJG2LKXhXUSkDsVBOgqRdk0tEpEWFqwPc3+wNsRHZnZYsP1gM1sYJARcaGb/FmzvZ2avBOtIZJnZ8UFRyWb2p2Btif8NZitjZteb2aqgnNlxOk2RKgokIk3XqUbX1tSo1wrcfRzwRyKZFAgeP+vuI4BZwKPB9keBd9z9aGAU8FmwfSjwmLsfCewAzg223wocE5RzTaxOTiQszWwXaSIz2+XuXWvZvhE41d0/DxIDfu3uvc1sG5HFlPYG27e4e7qZ5QKDotNWBKnN57v70OD5LUCqu//GzOYRWTTrVeDVqDUoROJCLRKR2PA6Hte1T22i8yGV882Y5veBx4DRwLKozK4icaFAIhIbU6PuPwwef0Ak4zTARUSWQgVYCFwLVQsTda+rUDNLAg5y98XAzUBPYJ9WkUhr0i8ZkabrFKxGV2meu1deAtzRzJYQ+bE2Ldh2PfC0md0E5AJXBNtvAJ4wsx8RaXlcS2RRpdokA38xsx5EFmp7OFh7QiRuNEYi0sKCMZIx7r4t3nURaQ3q2hIRkWZRi0RERJpFLRIREWkWBRIREWkWBRIREWkWBRIREWkWBRIREWmW/x9TupX1Hs6gaQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot of Losses\n",
    "history_dict = history.history\n",
    "loss_values = history_dict['loss']\n",
    "val_loss_values = history_dict['val_loss']\n",
    "acc_values = history_dict['acc']\n",
    "val_acc_values = history_dict['val_acc']\n",
    "\n",
    "epochs_index = range(1,len(loss_values)+1)\n",
    "fig_loss = plt.figure()\n",
    "plt.plot(epochs_index, loss_values, label='Training loss')\n",
    "plt.plot(epochs_index, val_loss_values, label='Validation loss')\n",
    "plt.title('Ten-layer MLP (SGD)')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "\n",
    "# Plot of Accuracies\n",
    "fig_accuracy = plt.figure()\n",
    "plt.plot(epochs_index,acc_values, label='Training accuracy')\n",
    "plt.plot(epochs_index,val_acc_values, label='Validation accuracy')\n",
    "plt.title('Ten-layer MLP (SGD)')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Adam"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f9a383c6dd8>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot of Losses\n",
    "history_dict_2 = history_2.history\n",
    "loss_values_2 = history_dict_2['loss']\n",
    "val_loss_values_2 = history_dict_2['val_loss']\n",
    "acc_values_2 = history_dict_2['acc']\n",
    "val_acc_values_2 = history_dict_2['val_acc']\n",
    "\n",
    "epochs_index = range(1,len(loss_values_2)+1)\n",
    "fig_loss_2 = plt.figure()\n",
    "plt.plot(epochs_index, loss_values_2, label='Training loss')\n",
    "plt.plot(epochs_index, val_loss_values_2, label='Validation loss')\n",
    "plt.title('Ten-layer MLP (Adam)')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "\n",
    "# Plot of Accuracies\n",
    "fig_accuracy_2 = plt.figure()\n",
    "plt.plot(epochs_index,acc_values_2, label='Training accuracy')\n",
    "plt.plot(epochs_index,val_acc_values_2, label='Validation accuracy')\n",
    "plt.title('Ten-layer MLP (Adam)')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Save the Plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "#fig_accuracy_2.savefig('fig_accuracy_2.eps', format='eps', dpi=2000)\n",
    "#fig_accuracy_2.savefig('fig_accuracy_2.pdf', format='pdf', dpi=2000)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
